/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sistemperpustakaan.controller;

import java.awt.Component;
import java.io.InputStream;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperPrintManager;
import net.sf.jasperreports.view.JasperViewer;
import sistemperpustakaan.entity.Bahasa;
import sistemperpustakaan.entity.Buku;
import sistemperpustakaan.entity.Jenis;
import sistemperpustakaan.entity.Kategori;
import sistemperpustakaan.entity.Penerbit;
import sistemperpustakaan.entity.ViewBuku;
import sistemperpustakaan.model.BukuModel;
import sistemperpustakaan.tablemodel.BukuTableModel;
import sistemperpustakaan.tablemodel.JenisTableModel;
import sistemperpustakaan.tablemodel.KategoriTableModel;
import sistemperpustakaan.tablemodel.PenerbitTableModel;
import sistemperpustakaan.utility.NumberUtility;
import sistemperpustakaan.view.buku.DialogBukuDetail;
import sistemperpustakaan.view.buku.DialogInventarisDetail;
import sistemperpustakaan.view.buku.DialogJenisDetail;
import sistemperpustakaan.view.buku.DialogKategoriDetail;
import sistemperpustakaan.view.buku.DialogPenerbitDetail;
import sistemperpustakaan.view.buku.FrmBukuView;
import sistemperpustakaan.view.buku.FrmJenisBukuView;
import sistemperpustakaan.view.buku.FrmKategoriBukuView;
import sistemperpustakaan.view.buku.FrmPenerbitBukuView;

/**
 *
 * @author EKo
 */
public class BukuController {

    FrmBukuView bukuView;
    DialogBukuDetail bukuDetail;
    DialogInventarisDetail inventarisDetail;
    DialogJenisDetail jenisDetail;
    BukuModel model;
    Buku buku;
    ViewBuku vBuku;
    Kategori kategori;
    Jenis jenis;
    Penerbit penerbit;
    FrmKategoriBukuView kategoriView;
    DialogKategoriDetail kategoriDetail;
    FrmJenisBukuView jenisView;
    FrmPenerbitBukuView penerbitView;
    DialogPenerbitDetail penerbitDetail;
    private Component framePeminjaman;

    public BukuController() {
    }

    public BukuController(FrmBukuView bukuView, BukuModel model) {
        this.bukuView = bukuView;
        this.model = model;
    }

    public BukuController(FrmKategoriBukuView kategoriView, BukuModel model) {
        this.kategoriView = kategoriView;
        this.model = model;
    }

    public BukuController(FrmJenisBukuView jenisView, BukuModel model) {
        this.jenisView = jenisView;
        this.model = model;
    }

    public BukuModel getModel() {
        return model;
    }

    public BukuController(FrmPenerbitBukuView penerbitView, BukuModel model) {
        this.penerbitView = penerbitView;
        this.model = model;
    }

    public void setBukuDetail(DialogBukuDetail bukuDetail) {
        this.bukuDetail = bukuDetail;
    }

    public FrmBukuView getBukuView() {
        return bukuView;
    }

    public void fillComboJenis(JComboBox comboBox) {
        comboBox.setModel(new DefaultComboBoxModel(model.getVectorJenis()));
    }

    public void fillComboKategori(JComboBox comboBox) {
        comboBox.setModel(new DefaultComboBoxModel(model.getVectorKategori()));
    }

    public void fillComboPenerbit(JComboBox comboBox) {
        comboBox.setModel(new DefaultComboBoxModel(model.getVectorPenerbit()));
    }

    public void fillComboBahasa(JComboBox comboBox) {
        comboBox.setModel(new DefaultComboBoxModel(model.getVectorBahasa()));
    }

    public void fillIdComboPenerbit(JComboBox comboBox) {
        comboBox.removeAllItems();
        List<Penerbit> list = model.getListPenerbit(-1, "", "", "", "", "");
        for (int i = 0; i < list.size(); i++) {
            comboBox.addItem(list.get(i).getId());
        }
    }

    public void changePenerbit(int index) {
        Penerbit penerbit = model.getPenerbit(index);
        bukuDetail.getTxtPenerbit().setText(penerbit.getNamaPenerbit());
        bukuDetail.getTxtAlamat().setText(penerbit.getAlamat());
        bukuDetail.getTxtKota().setText(penerbit.getKota());
        bukuDetail.getTxtEmail().setText(penerbit.getEmail());
        bukuDetail.getTxtTelepon().setText(penerbit.getTelepon());
    }

    public void findListBuku() {
        bukuView.setTableModel(new BukuTableModel());
        bukuView.getTableModel().setListBuku(model.getListBuku(
                bukuView.getTxtNoPanggil().getText(),
                bukuView.getTxtJudul().getText(),
                bukuView.getTxtPengarang().getText(),
                bukuView.getComboPenerbit().getSelectedItem().toString(),
                bukuView.getComboBahasa().getSelectedItem().toString(),
                bukuView.getComboJenis().getSelectedItem().toString(),
                bukuView.getComboKategori().getSelectedItem().toString(),
                bukuView.getOpt()));
        bukuView.getTblBukuView().setModel(bukuView.getTableModel());
        bukuView.setTableView();
        bukuView.setBukuId(0);
        int jumlah = bukuView.getTblBukuView().getRowCount();
        bukuView.getLblJumlah().setText(Integer.toString(jumlah));
    }

    public void refreshListBuku() {
        bukuView.getTxtNoPanggil().setText("");
        bukuView.getTxtJudul().setText("");
        bukuView.getTxtPengarang().setText("");
        bukuView.getComboJenis().setSelectedIndex(0);
        bukuView.getComboBahasa().setSelectedIndex(0);
        bukuView.getComboKategori().setSelectedIndex(0);
        bukuView.getComboPenerbit().setSelectedIndex(0);
        bukuView.getRadioSemua().setSelected(true);
        bukuView.setOpt(FrmBukuView.PILIH_SEMUA);
        findListBuku();
    }

    public void showDetailBuku(int id) {
        buku = model.getBuku(id);
        bukuDetail.getTxtId().setText(buku.getId()+"");
        bukuDetail.getTxtNomorPanggil().setText(buku.getNo_panggil());
        bukuDetail.getTxtIsbn().setText(buku.getIsbn());
        bukuDetail.getTxtJudul().setText(buku.getJudul());
        bukuDetail.getTxtPengarang().setText(buku.getPengarang());
        setSelectedPenerbit(buku.getPenerbit_id());
        bukuDetail.getTxtTahun().setText(buku.getTahun() + "");
        setSelectedBahasa(buku.getBahasa_id());

        setSelectedJenis(buku.getJenis_id());
        setSelectedKategori(buku.getKategori_id());
        bukuDetail.getTxtSubyek().setText(buku.getSubyek());
        bukuDetail.getTxtJumlahHalaman().setText(buku.getJumlah_halaman() + "");

        setSelectedPenerbit(buku.getPenerbit_id());

    }

    public void saveNewBuku() {
        if (bukuDetail.getTxtId().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "ID buku masih kosong");
        } else if (bukuDetail.getTxtIdJenis().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Jenis buku masih kosong");
        } else if (bukuDetail.getTxtIdKategori().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Kategori buku masih kosong");
        } else if (bukuDetail.getTxtJudul().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Judul buku masih kosong");
        } else if (bukuDetail.getTxtPengarang().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Pengarang  buku masih kosong");
        } else if (bukuDetail.getTxtIdPanerbit().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Penerbit buku masih kosong");
        } else if (bukuDetail.getTxtIdBahasa().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Bahasa buku masih kosong");
        }
        else if (bukuDetail.getTxtTahun().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Tahun terbit buku masih kosong");
        }
        else if (bukuDetail.getTxtJumlahHalaman().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Jumlah Halaman buku masih kosong");
        }
        else if (!NumberUtility.isNumberValid(bukuDetail.getTxtTahun().getText())) {
            JOptionPane.showMessageDialog(bukuView, "Tahun tidak valid");
            bukuDetail.getTxtTahun().requestFocus();
        } else {
            if (model.insertBuku(
                    Integer.valueOf(bukuDetail.getTxtId().getText()),
                    bukuDetail.getTxtNomorPanggil().getText(),
                    bukuDetail.getTxtIsbn().getText(),
                    bukuDetail.getTxtJudul().getText(),
                    bukuDetail.getTxtPengarang().getText(),
                    Integer.valueOf(bukuDetail.getTxtIdPanerbit().getText()),
                    Integer.valueOf(bukuDetail.getTxtTahun().getText().toString()),
                    Integer.valueOf(bukuDetail.getComboBahasa().getSelectedIndex()),
                    Integer.valueOf(bukuDetail.getTxtIdJenis().getText()),
                    Integer.valueOf(bukuDetail.getTxtIdKategori().getText()),
                    bukuDetail.getTxtSubyek().getText(),
                    Integer.valueOf(bukuDetail.getTxtJumlahHalaman().getText().toString()))) {
                JOptionPane.showMessageDialog(bukuView, "Simpan data buku sukses");
                bukuDetail.dispose();
                findListBuku();
            } else {
                JOptionPane.showMessageDialog(bukuView, "Simpan data buku gagal");
            }
        }
    }

    public void saveUpdateBuku() {
        if (bukuDetail.getTxtIdJenis().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Jenis buku masih kosong");
        } else if (bukuDetail.getTxtIdKategori().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Kategori buku masih kosong");
        } else if (bukuDetail.getTxtJudul().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Judul buku masih kosong");
        } else if (bukuDetail.getTxtPengarang().getText().equals("")) {
            JOptionPane.showMessageDialog(bukuView, "Pengarang  buku masih kosong");
        } //        else if (bukuDetail.getTxtIdPanerbit().getText().equals("")) {
        //            JOptionPane.showMessageDialog(bukuView, "Penerbit buku masih kosong");
        //        }
//        else if (bukuDetail.getTxtTahun().getText().equals("")) {
//            JOptionPane.showMessageDialog(bukuView, "Tahun terbit buku masih kosong");
//        }
        else if (!NumberUtility.isNumberValid(bukuDetail.getTxtTahun().getText())) {
            JOptionPane.showMessageDialog(bukuView, "Tahun tidak valid");
            bukuDetail.getTxtTahun().requestFocus();
        } else {

            if (model.updateBuku(
                    bukuDetail.getTxtId().getText(),
                    bukuDetail.getTxtNomorPanggil().getText(),
                    bukuDetail.getTxtIsbn().getText(),
                    bukuDetail.getTxtJudul().getText(),
                    bukuDetail.getTxtPengarang().getText(),
                    Integer.valueOf(bukuDetail.getTxtIdPanerbit().getText()),
                    Integer.valueOf(bukuDetail.getTxtTahun().getText()),
                    Integer.valueOf(bukuDetail.getComboBahasa().getSelectedIndex()),
                    Integer.valueOf(bukuDetail.getTxtIdJenis().getText()),
                    Integer.valueOf(bukuDetail.getTxtIdKategori().getText()),
                    bukuDetail.getTxtSubyek().getText(),
                    Integer.valueOf(bukuDetail.getTxtJumlahHalaman().getText()),
                    bukuView.getBukuId())) {
                JOptionPane.showMessageDialog(bukuView, "Update data buku sukses");
                bukuDetail.dispose();
                findListBuku();
            } else {
                JOptionPane.showMessageDialog(bukuView, "Update data buku gagal");
            }
        }
    }

    public void saveDeleteBuku() {
        if (bukuView.getBukuId() == 0) {
            JOptionPane.showMessageDialog(bukuView, "Anda belum memilih data");
        } else if (JOptionPane.showConfirmDialog(bukuView, "Apakah anda yakin menghapus data ini?", "Hapus data",
                JOptionPane.YES_NO_CANCEL_OPTION) == JOptionPane.YES_OPTION) {
            if (model.deleteBuku(bukuView.getBukuId())) {
                JOptionPane.showMessageDialog(bukuView, "Delete data buku sukses");
                findListBuku();
            } else {
                JOptionPane.showMessageDialog(bukuView, "Delete data buku gagal");
            }
        }
    }

    public void showGenerateIdBuku() {
        Buku buku = model.generateIdBuku();
        bukuDetail.getTxtId().setText(buku.getId() + "");
    }

    public void findListKategori() {
        int idKategori = -1;
        if (!kategoriView.getTxtNo().getText().equals("")) {
            try {
                idKategori = Integer.valueOf(kategoriView.getTxtNo().getText());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(kategoriView, "Field ini harus diisi dengan angka");
                kategoriView.getTxtNo().setText("");
                idKategori = 0;
            }
        }
        kategoriView.getTblKategori().setModel(new KategoriTableModel(model.getListKategori(idKategori, kategoriView.getTxtNama().getText())));
        kategoriView.setWidth();
        kategoriView.setIdKategori(-1);
        int jumlah = kategoriView.getTblKategori().getRowCount();
        kategoriView.getLblJumlah().setText(Integer.toString(jumlah));
    }

    public void refreshListKategori() {
        kategoriView.getTxtNo().setText("");
        kategoriView.getTxtNama().setText("");
        findListKategori();
    }

    public void saveNewKategori() {
        if (kategoriDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "Nama Kategori masih kosong");
            kategoriDetail.getTxtNama().requestFocus();
        } else if (kategoriDetail.getTxtNo().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "ID Kategori masih kosong");
            kategoriDetail.getTxtNo().requestFocus();
        } else {
            if (model.insertKategori(Integer.valueOf(kategoriDetail.getTxtNo().getText()),
                    kategoriDetail.getTxtNama().getText())) {
                JOptionPane.showMessageDialog(kategoriView, "Kategori Buku sukses disimpan");
                findListKategori();
                kategoriDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(kategoriView, "Simpan kategori baru gagal");
            }
        }
    }

    public void saveUpdateKategori() {
        if (kategoriDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "Nama Kategori masih kosong");
            kategoriDetail.getTxtNama().requestFocus();
        } else if (kategoriDetail.getTxtNo().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "ID Kategori masih kosong");
            kategoriDetail.getTxtNo().requestFocus();
        } else {
            if (model.updateKategori(Integer.valueOf(kategoriDetail.getTxtNo().getText()), kategoriDetail.getTxtNama().getText(), kategoriView.getIdKategori())) {
                JOptionPane.showMessageDialog(kategoriView, "Kategori Buku sukses diupdate");
                findListKategori();
                kategoriDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(kategoriView, "Update kategori gagal");
            }
        }
    }

    public void showDetailKategori(int idKategori) {
        Kategori kategori = model.getKategori(idKategori);
        kategoriDetail.getTxtNo().setText(kategori.getId() + "");
        kategoriDetail.getTxtNama().setText(kategori.getNamaKategori());
        //kategoriDetail.getTxtNo().setEditable(false);
        //kategoriDetail.getTxtNama().requestFocus();
    }

    public void showGenerateIdKategori() {
        Kategori kategori = model.generateIdKategori();
        kategoriDetail.getTxtNo().setText(kategori.getId() + "");
    }

    public void setDialogKategoriDetail(DialogKategoriDetail kategoriDetail) {
        this.kategoriDetail = kategoriDetail;
    }

    public FrmKategoriBukuView getKategoriView() {
        return kategoriView;
    }

    public FrmPenerbitBukuView getPenerbitView() {
        return penerbitView;
    }

    public void saveDeleteKategori() {
        if (JOptionPane.showConfirmDialog(kategoriView, "Apakah anda yakin akan menghapus kategori ini?", "Hapus data",
                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            if (model.deleteKategori(kategoriView.getIdKategori())) {
                JOptionPane.showMessageDialog(kategoriView, "Kategori sukses dihapus");
            } else {
                JOptionPane.showMessageDialog(kategoriView, "Kategori gagal dihapus");
            }
            findListKategori();
        }
    }

    public void findListJenis() {
        int idJenis = -1;
        if (!jenisView.getTxtNo().getText().equals("")) {
            try {
                idJenis = Integer.valueOf(jenisView.getTxtNo().getText());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(jenisView, "Field ini harus diisi dengan angka");
                jenisView.getTxtNo().setText("");
                idJenis = 0;
            }
        }
        jenisView.getTblJenis().setModel(new JenisTableModel(model.getListJenis(idJenis, jenisView.getTxtNama().getText())));
        jenisView.setWidth();
        jenisView.setIdJenis(-1);
        int jumlah = jenisView.getTblJenis().getRowCount();
        jenisView.getLblJumlah().setText(Integer.toString(jumlah));
    }

    public void refreshListJenis() {
        jenisView.getTxtNama().setText("");
        jenisView.getTxtNo().setText("");
        findListJenis();
    }

    public void setDialogJenisDetail(DialogJenisDetail jenisDetail) {
        this.jenisDetail = jenisDetail;
    }

    public void showDetailJenis(int idJenis) {
        Jenis jenis = model.getJenis(idJenis);
        jenisDetail.getTxtNo().setText(jenis.getId() + "");
        jenisDetail.getTxtNama().setText(jenis.getNama_jenis());
        jenisDetail.getTxtNama().requestFocus();
        //jenisDetail.getTxtNo().setEditable(false);
    }

    public void saveNewJenis() {
        if (jenisDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(jenisDetail, "Nama Jenis buku masih kosong");
            jenisDetail.getTxtNama().requestFocus();
        } else if (jenisDetail.getTxtNo().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "ID Jenis masih kosong");
            kategoriDetail.getTxtNo().requestFocus();
        } else {
            if (model.insertJenis(Integer.valueOf(jenisDetail.getTxtNo().getText()), jenisDetail.getTxtNama().getText())) {
                JOptionPane.showMessageDialog(jenisDetail, "Simpan Jenis baru sukses");
                findListJenis();
                jenisDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(jenisView, "Simpan jenis buku gagal");
            }
        }
    }

    public void saveUpdateJenis() {

        if (jenisDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(jenisDetail, "Nama Jenis buku masih kosong");
            jenisDetail.getTxtNama().requestFocus();
        } else if (jenisDetail.getTxtNo().getText().equals("")) {
            JOptionPane.showMessageDialog(kategoriView, "ID Jenis masih kosong");
            kategoriDetail.getTxtNo().requestFocus();
        } else {
            if (model.updateJenis(Integer.valueOf(jenisDetail.getTxtNo().getText()), jenisDetail.getTxtNama().getText(), jenisView.getIdJenis())) {
                JOptionPane.showMessageDialog(jenisDetail, "Update Jenis baru sukses");
                findListJenis();
                jenisDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(jenisView, "Update jenis buku gagal");
            }
        }
    }

    public void saveDeleteJenis() {
        if (JOptionPane.showConfirmDialog(jenisView, "Apakah anda yakinakan mengahapus data ini?", "Hapus data",
                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            if (model.deleteJenis(jenisView.getIdJenis())) {
                JOptionPane.showMessageDialog(jenisView, "Hapus data jenis sukses");
                findListJenis();
            } else {
                JOptionPane.showMessageDialog(jenisView, "Hapus data jenis gagal");
            }
        }

    }

    public void showGenerateIdJenis() {
        Jenis jenis = model.generateIdJenis();
        jenisDetail.getTxtNo().setText(jenis.getId() + "");
        //kategoriDetail.getTxtNo().setEditable(false);
        //kategoriDetail.getTxtNama().requestFocus();
    }

    public FrmJenisBukuView getJenisView() {
        return jenisView;
    }

    public void findListPenerbit() {
        int idPenerbit = -1;
        if (!penerbitView.getTxtIdPenerbit().getText().equals("")) {
            try {
                idPenerbit = Integer.valueOf(penerbitView.getTxtIdPenerbit().getText());
            } catch (Exception e) {
                JOptionPane.showMessageDialog(kategoriView, "Field ini harus diisi dengan angka");
                penerbitView.getTxtIdPenerbit().setText("");
                idPenerbit = 0;
            }
        }
        penerbitView.setTableModel(new PenerbitTableModel());
        penerbitView.getTableModel().setListPenerbit(model.getListPenerbit(
                idPenerbit,
                penerbitView.getTxtNama().getText(),
                penerbitView.getTxtAlamat().getText(),
                penerbitView.getTxtKota().getText(),
                penerbitView.getTxtEmail().getText(),
                penerbitView.getTxtTelepon().getText()));
        penerbitView.getTablePenerbit().setModel(penerbitView.getTableModel());
        penerbitView.setWidth();
        penerbitView.setIdPenerbit(-1);
        int jumlah = penerbitView.getTablePenerbit().getRowCount();
        penerbitView.getLblJumlah().setText(Integer.toString(jumlah));
    }

    public void refreshListPenerbit() {
        penerbitView.getTxtIdPenerbit().setText("");
        penerbitView.getTxtNama().setText("");
        penerbitView.getTxtAlamat().setText("");
        penerbitView.getTxtKota().setText("");
        penerbitView.getTxtEmail().setText("");
        penerbitView.getTxtTelepon().setText("");
        findListPenerbit();
    }

    public void setDialogPenerbitDetail(DialogPenerbitDetail penerbitDetail) {
        this.penerbitDetail = penerbitDetail;
    }

    public void showDetailPenerbit(int idPenerbit) {
        Penerbit penerbit = model.getPenerbit(idPenerbit);
        penerbitDetail.getTxtIdPenerbit().setText(penerbit.getId() + "");
        penerbitDetail.getTxtNama().setText(penerbit.getNamaPenerbit());
        penerbitDetail.getTxtAlamat().setText(penerbit.getAlamat());
        penerbitDetail.getTxtKota().setText(penerbit.getKota());
        penerbitDetail.getTxtEmail().setText(penerbit.getEmail());
        penerbitDetail.getTxtTelepon().setText(penerbit.getTelepon());
        //penerbitDetail.getTxtNama().requestFocus();
    }

    public void saveNewPenerbit() {
        if (penerbitDetail.getTxtIdPenerbit().getText().equals("")) {
            JOptionPane.showMessageDialog(jenisDetail, "ID penerbit buku masih kosong");
            jenisDetail.getTxtNama().requestFocus();
        } else if (penerbitDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Nama penerbit masih kosong");
            penerbitDetail.getTxtNama().requestFocus();
        } else if (penerbitDetail.getTxtAlamat().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Alamat penerbit masih kosong");
            penerbitDetail.getTxtAlamat().requestFocus();
        } else if (penerbitDetail.getTxtKota().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Kota penerbit masih kosong");
            penerbitDetail.getTxtKota().requestFocus();
        } else {
            if (model.insertPenerbit(
                    Integer.valueOf(penerbitDetail.getTxtIdPenerbit().getText()),
                    penerbitDetail.getTxtNama().getText(),
                    penerbitDetail.getTxtAlamat().getText(),
                    penerbitDetail.getTxtKota().getText(),
                    penerbitDetail.getTxtEmail().getText(),
                    penerbitDetail.getTxtTelepon().getText())) {
                JOptionPane.showMessageDialog(kategoriView, "Penerbit baru sukses disimpan");
                findListPenerbit();
                penerbitDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(kategoriView, "Penerbit baru gagal disimpan");
            }
        }
    }

    public void saveUpdatePenerbit() {
        if (penerbitDetail.getTxtIdPenerbit().getText().equals("")) {
            JOptionPane.showMessageDialog(jenisDetail, "ID penerbit buku masih kosong");
            jenisDetail.getTxtNama().requestFocus();
        } else if (penerbitDetail.getTxtNama().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Nama penerbit masih kosong");
            penerbitDetail.getTxtNama().requestFocus();
        } else if (penerbitDetail.getTxtAlamat().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Alamat penerbit masih kosong");
            penerbitDetail.getTxtAlamat().requestFocus();
        } else if (penerbitDetail.getTxtKota().getText().equals("")) {
            JOptionPane.showMessageDialog(penerbitView, "Kota penerbit masih kosong");
            penerbitDetail.getTxtKota().requestFocus();
        } else {
            if (model.updatePenerbit(
                    Integer.valueOf(penerbitDetail.getTxtIdPenerbit().getText()),
                    penerbitDetail.getTxtNama().getText(),
                    penerbitDetail.getTxtAlamat().getText(),
                    penerbitDetail.getTxtKota().getText(),
                    penerbitDetail.getTxtEmail().getText(),
                    penerbitDetail.getTxtTelepon().getText(),
                    penerbitView.getIdPenerbit())) {
                JOptionPane.showMessageDialog(kategoriView, "Data penerbit sukses diupdate");
                findListPenerbit();
                penerbitDetail.dispose();
            } else {
                JOptionPane.showMessageDialog(kategoriView, "Data penerbit gagal diupdate");
            }
        }
    }

    public void saveDeletePenerbit() {
        if (JOptionPane.showConfirmDialog(penerbitView, "Apakah anda yakin akan menghapus data penerbit ini?", "Hapus data penerbit",
                JOptionPane.YES_NO_OPTION) == JOptionPane.YES_OPTION) {
            if (model.deletePenerbit(penerbitView.getIdPenerbit())) {
                JOptionPane.showMessageDialog(penerbitView, "Hapus data penerbit sukses");
                findListPenerbit();
            } else {
                JOptionPane.showMessageDialog(penerbitView, "Hapus data penerbit gagal");
            }
        }
    }

    public void showGenerateIdPenerbit() {
        Penerbit penerbit = model.generateIdPenerbit();
        penerbitDetail.getTxtIdPenerbit().setText(penerbit.getId() + "");
    }

    public void setSelectedBahasa(int idBahasa) {
        Bahasa bahasa = model.getBahasa(idBahasa);
        bukuDetail.getTxtIdBahasa().setText(bahasa.getId() + "");
        bukuDetail.getComboBahasa().setSelectedIndex(idBahasa);
    }

    public void setSelectedJenis(int idJenis) {
        Jenis jenis = model.getJenis(idJenis);
        bukuDetail.getTxtIdJenis().setText(jenis.getId() + "");
        bukuDetail.getTxtNamaJenis().setText(jenis.getNama_jenis());
    }

    public void setSelectedKategori(int idKategori) {
        Kategori kategori = model.getKategori(idKategori);
        bukuDetail.getTxtIdKategori().setText(kategori.getId() + "");
        bukuDetail.getTxtNamaKategori().setText(kategori.getNamaKategori());
    }

    public void setSelectedPenerbit(int idPenerbit) {
        Penerbit penerbit = model.getPenerbit(idPenerbit);
        bukuDetail.getTxtIdPanerbit().setText(penerbit.getId() + "");
        bukuDetail.getTxtPenerbit().setText(penerbit.getNamaPenerbit());
        bukuDetail.getTxtAlamat().setText(penerbit.getAlamat());
        bukuDetail.getTxtKota().setText(penerbit.getKota());
        bukuDetail.getTxtEmail().setText(penerbit.getEmail());
        bukuDetail.getTxtTelepon().setText(penerbit.getTelepon());
    }

    public void setSelectedBuku(int idBuku) {
        Buku buku = model.getBuku(idBuku);
        inventarisDetail.getTxtIdBuku().setText(buku.getId()+"");
        inventarisDetail.getTxtJudul().setText(buku.getJudul());
        System.out.println(idBuku);
    }

    public void report(int opt) {
//        File report_file = new File("report/BukuReport.jasper");
        InputStream stream = getClass().getResourceAsStream("report/BukuReport.jasper");
        Map<String, Object> map = new HashMap<String, Object>();

//        int id=anggotaView.cekId();
//        String nis = anggotaView.getTxtNis().getText();
//
        map.put("no_panggil", bukuView.cekNoPanggil());
        map.put("judul", bukuView.cekJudul());
        map.put("pengarang", bukuView.cekPengarang());
        map.put("penerbit", bukuView.cekPenerbit());
        map.put("bahasa", bukuView.cekBahasa());
        map.put("jenis", bukuView.cekJenis());
        map.put("kategori", bukuView.cekKategori());
        map.put("opt", bukuView.cekOpt());
        map.put("logo", "C:\\logo.jpg");

        try {
//            System.out.println("ngisor catch");
//            JasperReport jasperReport = (JasperReport) JRLoader.loadObject(report_file.getPath());
            JasperPrint jasperPrint = JasperFillManager.fillReport(stream, map, model.getConnection());
            switch (opt) {

                case 0:
                    JasperViewer.viewReport(jasperPrint, false);
//                    System.out.println("mlebu opt");
                    break;
                case 1:
                    JasperPrintManager.printReport(jasperPrint, true);
                    break;
//                case 2:
//                            JFileChooser fc = new JFileChooser();
//                            fc.setFileFilter(new PdfFilter());
//                            int returnValue = fc.showSaveDialog(anggotaView);
//                            if(returnValue == JFileChooser.APPROVE_OPTION){
//                                File f = fc.getSelectedFile();
//                                String path = f.getPath();
//                                String ext = FilterUtility.getExtension(f);
//                                if(ext != "pdf" ) path += ".pdf";
//                                System.out.println("sukses");
////                                JasperPrintManager.printReport(, true);
//                                JasperPrintManager.printReportToPdfFile(jasperPrint, path);
//                                JOptionPane.showMessageDialog(anggotaView, "Downlaod data berhasil \n lokasi file anda: "+path);
//                            }
//                            break;
            }

        } catch (JRException ex) {
            JOptionPane.showMessageDialog(null, "Data tidak dapat dicetak!" + "\n" + ex.getMessage(), "Cetak Data", JOptionPane.ERROR_MESSAGE);
        } catch (Exception e) {
        }
    }
}
